home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / emula / arosdv19.lha / AROS / Demos / demowin.c < prev    next >
C/C++ Source or Header  |  1996-10-29  |  19KB  |  906 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $VER: demowin.c 1.16 (2.10.96)
  4.  
  5.     Desc: A short demo for the features of Intuition and Graphics
  6.     Lang: english
  7. */
  8. #define ENABLE_RT    1
  9. #define ENABLE_PURIFY    1
  10.  
  11. #include <exec/memory.h>
  12. #include <dos/dos.h>
  13. #include <dos/exall.h>
  14. #include <dos/datetime.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/aros_protos.h>
  18. #include <clib/alib_protos.h>
  19. #include <clib/utility_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/intuition_protos.h>
  22. #include <clib/console_protos.h>
  23. #include <intuition/intuitionbase.h>
  24. #include <intuition/intuition.h>
  25. #include <graphics/gfxbase.h>
  26. #include <graphics/rastport.h>
  27. #include <ctype.h>
  28. #include <aros/rt.h>
  29. #include <intuition/classusr.h>
  30. #include <intuition/gadgetclass.h>
  31. #include <intuition/imageclass.h>
  32.  
  33. #if 1
  34. #   define D(x)    x
  35. #else
  36. #   define D(x)     /* eps */
  37. #endif
  38. #define bug    kprintf
  39.  
  40. struct Library *ConsoleDevice;
  41. struct IntuitionBase *IntuitionBase;
  42. struct GfxBase *GfxBase;
  43. Object * frame, * gadget;
  44.  
  45. void Refresh (struct RastPort * rp)
  46. {
  47.     int len;
  48.     int t, tend, pen;
  49.  
  50.     SetAPen (rp, 1);
  51.     SetDrMd (rp, JAM2);
  52.  
  53.     Move (rp, 0, 0);
  54.     Draw (rp, 320, 150);
  55.  
  56.     Move (rp, 640, 0);
  57.     Draw (rp, 0, 300);
  58.  
  59.     Move (rp, 300, 40);
  60.     Text (rp, "Hello World.", 12);
  61.  
  62.     SetAPen (rp, 3);
  63.     RectFill (rp, 90, 0, 120, 30);
  64.     SetAPen (rp, 0);
  65.     RectFill (rp, 100, 10, 110, 20);
  66.  
  67.     SetAPen (rp, 1);
  68.     RectFill (rp, 150, 10, 160, 20);
  69.  
  70.     SetAPen (rp, 2);
  71.     RectFill (rp, 200, 10, 210, 20);
  72.  
  73.     SetAPen (rp, 3);
  74.     RectFill (rp, 250, 10, 260, 20);
  75.  
  76.     len = TextLength (rp, "Hello World.", 12);
  77.  
  78.     SetAPen (rp, 2);
  79.     RectFill (rp, 299, 59, 300+len, 60+rp->Font->tf_YSize);
  80.  
  81.     SetAPen (rp, 1);
  82.     Move (rp, 300, 60 + rp->Font->tf_Baseline);
  83.     Text (rp, "Hello World.", 12);
  84.  
  85.     SetDrMd (rp, JAM1);
  86.     SetAPen (rp, 1);
  87.     Move (rp, 301, 101);
  88.     Text (rp, "Hello World.", 12);
  89.     SetAPen (rp, 2);
  90.     Move (rp, 300, 100);
  91.     Text (rp, "Hello World.", 12);
  92.  
  93.     Move (rp, 20, 350);
  94.     Text (rp, "Press \"Complement\" to flip PropGadgets", 39);
  95.  
  96.     tend = 10;
  97.     t = 0;
  98.  
  99.     for (pen=1; pen<16; pen++)
  100.     {
  101.     SetAPen (rp, pen);
  102.  
  103.     for ( ; t<tend; t++)
  104.     {
  105.         DrawEllipse (rp, 160, 150, t, t>>1);
  106.         DrawEllipse (rp, 160, 151, t, t>>1);
  107.     }
  108.  
  109.     tend += 10;
  110.     }
  111. }
  112.  
  113. #define GAD_WID     100
  114. #define GAD_HEI     30
  115. #define BORDER        20
  116.  
  117. WORD BorderData[6*2*2] =
  118. {
  119.     0, GAD_HEI-1, /* Top (lighter) edge */
  120.     1, GAD_HEI-2,
  121.     1, 1,
  122.     GAD_WID-2, 1,
  123.     GAD_WID-1, 0,
  124.     0, 0,
  125.  
  126.     0, -(GAD_HEI-2), /* Bottom (darker) edge */
  127.     -1, -(GAD_HEI-3),
  128.     -1, -1,
  129.     -(GAD_WID-3), -1,
  130.     -(GAD_WID-2), 0,
  131.     -1, 0,
  132. };
  133. struct Border
  134. DemoBottomBorder =
  135. {
  136.     GAD_WID-1, GAD_HEI-1,
  137.     1, 2,
  138.     JAM1,
  139.     6,
  140.     &BorderData[6*2],
  141.     NULL
  142. },
  143. DemoTopBorder =
  144. {
  145.     0, 0,
  146.     2, 1,
  147.     JAM1,
  148.     6,
  149.     &BorderData[0],
  150.     &DemoBottomBorder
  151. };
  152. struct Border DemoIBottomBorder =
  153. {
  154.     GAD_WID-1, GAD_HEI-1,
  155.     2, 1,
  156.     JAM1,
  157.     6,
  158.     &BorderData[6*2],
  159.     NULL
  160. },
  161. DemoITopBorder =
  162. {
  163.     0, 0,
  164.     1, 2,
  165.     JAM1,
  166.     6,
  167.     &BorderData[0],
  168.     &DemoIBottomBorder
  169. };
  170.  
  171. struct PropInfo
  172. DemoPropInfo1 =
  173. {
  174.     AUTOKNOB | FREEHORIZ | PROPNEWLOOK,
  175.     0, 0,
  176.     MAXBODY, MAXBODY,
  177.     0,0,0,0,0,0
  178. },
  179. DemoPropInfo2 =
  180. {
  181.     AUTOKNOB | FREEVERT | PROPNEWLOOK,
  182.     0, 0,
  183.     MAXBODY, MAXBODY,
  184.     0,0,0,0,0,0
  185. },
  186. DemoPropInfo3 =
  187. {
  188.     AUTOKNOB | FREEHORIZ | FREEVERT | PROPNEWLOOK,
  189.     0, 0,
  190.     MAXBODY, MAXBODY,
  191.     0,0,0,0,0,0
  192. };
  193.  
  194. struct IntuiText
  195. DemoIText =
  196. {
  197.     1, 2, /* Pens */
  198.     JAM1, /* Drawmode */
  199.     10, 10, /* Left, Top */
  200.     NULL, /* TextAttr */
  201.     "None", /* Text */
  202.     NULL /* Next */
  203. };
  204.  
  205. #include "images/ArrowUp0.h"
  206. #include "images/ArrowUp1.h"
  207. #include "images/ArrowDown0.h"
  208. #include "images/ArrowDown1.h"
  209. #include "images/ArrowLeft0.h"
  210. #include "images/ArrowLeft1.h"
  211. #include "images/ArrowRight0.h"
  212. #include "images/ArrowRight1.h"
  213. #include "images/ImageButton0.h"
  214. #include "images/ImageButton1.h"
  215.  
  216. struct Gadget
  217. DemoGadget12 =
  218. {
  219.     NULL, /* &DemoGadget, / * NextGadget */
  220.     -(BORDER+2*ARROWLEFT1_WIDTH), -((GAD_HEI+BORDER)*3),
  221.     ARROWLEFT1_WIDTH, ARROWLEFT1_HEIGHT, /* hit box */
  222.     GFLG_GADGHIMAGE
  223.     | GFLG_RELRIGHT
  224.     | GFLG_RELBOTTOM
  225.     | GFLG_GADGIMAGE
  226.     , /* Flags */
  227.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  228.     GTYP_BOOLGADGET, /* Type */
  229.     &ArrowLeft0Image, &ArrowLeft1Image, /* Render */
  230.     NULL, /* Text */
  231.     0L, NULL, /* MutualExcl, SpecialInfo */
  232.     13, /* GadgetID */
  233.     NULL /* UserData */
  234. },
  235. DemoGadget11 =
  236. {
  237.     &DemoGadget12, /* NextGadget */
  238.     -(BORDER+1*ARROWLEFT1_WIDTH), -((GAD_HEI+BORDER)*3),
  239.     ARROWLEFT1_WIDTH, ARROWLEFT1_HEIGHT, /* hit box */
  240.     GFLG_GADGHIMAGE
  241.     | GFLG_RELRIGHT
  242.     | GFLG_RELBOTTOM
  243.     | GFLG_GADGIMAGE
  244.     , /* Flags */
  245.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  246.     GTYP_BOOLGADGET, /* Type */
  247.     &ArrowRight0Image, &ArrowRight1Image, /* Render */
  248.     NULL, /* Text */
  249.     0L, NULL, /* MutualExcl, SpecialInfo */
  250.     12, /* GadgetID */
  251.     NULL /* UserData */
  252. },
  253. DemoGadget10 =
  254. {
  255.     &DemoGadget11, /* NextGadget */
  256.     -(BORDER+ARROWDOWN1_WIDTH), -((GAD_HEI+BORDER)*3+ARROWLEFT1_HEIGHT+0*ARROWDOWN1_HEIGHT-5),
  257.     ARROWDOWN1_WIDTH, ARROWDOWN1_HEIGHT, /* hit box */
  258.     GFLG_GADGHIMAGE
  259.     | GFLG_RELRIGHT
  260.     | GFLG_RELBOTTOM
  261.     | GFLG_GADGIMAGE
  262.     , /* Flags */
  263.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  264.     GTYP_BOOLGADGET, /* Type */
  265.     &ArrowDown0Image, &ArrowDown1Image, /* Render */
  266.     NULL, /* Text */
  267.     0L, NULL, /* MutualExcl, SpecialInfo */
  268.     11, /* GadgetID */
  269.     NULL /* UserData */
  270. },
  271. DemoGadget9 =
  272. {
  273.     &DemoGadget10, /* NextGadget */
  274.     -(BORDER+ARROWDOWN1_WIDTH), -((GAD_HEI+BORDER)*3+ARROWLEFT1_HEIGHT+1*ARROWDOWN1_HEIGHT-5),
  275.     ARROWDOWN1_WIDTH, ARROWDOWN1_HEIGHT, /* hit box */
  276.     GFLG_GADGHIMAGE
  277.     | GFLG_RELRIGHT
  278.     | GFLG_RELBOTTOM
  279.     | GFLG_GADGIMAGE
  280.     , /* Flags */
  281.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  282.     GTYP_BOOLGADGET, /* Type */
  283.     &ArrowUp0Image, &ArrowUp1Image, /* Render */
  284.     NULL, /* Text */
  285.     0L, NULL, /* MutualExcl, SpecialInfo */
  286.     10, /* GadgetID */
  287.     NULL /* UserData */
  288. },
  289. DemoGadget8 =
  290. {
  291.     &DemoGadget9, /* NextGadget */
  292.     -(BORDER+ARROWDOWN1_WIDTH+GAD_WID), -((GAD_HEI+BORDER)*3+GAD_WID),
  293.     GAD_WID, GAD_WID, /* hit box */
  294.     GFLG_GADGHIMAGE
  295.     | GFLG_RELRIGHT
  296.     | GFLG_RELBOTTOM
  297.     , /* Flags */
  298.     GACT_IMMEDIATE
  299.     | GACT_RELVERIFY
  300.     | GACT_TOGGLESELECT
  301.     , /* Activation */
  302.     GTYP_PROPGADGET, /* Type */
  303.     NULL, NULL, /* Render */
  304.     NULL, /* Text */
  305.     0L, (APTR)&DemoPropInfo3, /* MutualExcl, SpecialInfo */
  306.     9, /* GadgetID */
  307.     NULL /* UserData */
  308. },
  309. DemoGadget7 =
  310. {
  311.     &DemoGadget8, /* NextGadget */
  312.     -(BORDER+ARROWDOWN1_WIDTH), BORDER,
  313.     ARROWDOWN1_WIDTH, -(GAD_HEI*3+BORDER*4+2*ARROWDOWN1_HEIGHT), /* hit box */
  314.     GFLG_GADGHIMAGE
  315.     | GFLG_RELRIGHT
  316.     | GFLG_RELHEIGHT
  317.     , /* Flags */
  318.     GACT_IMMEDIATE
  319.     | GACT_RELVERIFY
  320.     | GACT_TOGGLESELECT
  321.     , /* Activation */
  322.     GTYP_PROPGADGET, /* Type */
  323.     NULL, NULL, /* Render */
  324.     NULL, /* Text */
  325.     0L, (APTR)&DemoPropInfo2, /* MutualExcl, SpecialInfo */
  326.     8, /* GadgetID */
  327.     NULL /* UserData */
  328. },
  329. DemoGadget6 =
  330. {
  331.     &DemoGadget7, /* NextGadget */
  332.     BORDER, -((GAD_HEI+BORDER)*3),
  333.     -(2*BORDER+2*ARROWLEFT0_WIDTH), ARROWLEFT0_HEIGHT, /* hit box */
  334.     GFLG_GADGHIMAGE
  335.     | GFLG_RELBOTTOM
  336.     | GFLG_RELWIDTH
  337.     , /* Flags */
  338.     GACT_IMMEDIATE
  339.     | GACT_RELVERIFY
  340.     | GACT_TOGGLESELECT
  341.     , /* Activation */
  342.     GTYP_PROPGADGET, /* Type */
  343.     NULL, NULL, /* Render */
  344.     NULL, /* Text */
  345.     0L, (APTR)&DemoPropInfo1, /* MutualExcl, SpecialInfo */
  346.     7, /* GadgetID */
  347.     NULL /* UserData */
  348. },
  349. DemoGadget5 =
  350. {
  351.     &DemoGadget6, /* NextGadget */
  352.     BORDER+(GAD_WID+BORDER)*4, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  353.     GFLG_GADGHIMAGE
  354.     | GFLG_LABELSTRING
  355.     | GFLG_RELBOTTOM
  356.     , /* Flags */
  357.     GACT_IMMEDIATE
  358.     | GACT_RELVERIFY
  359.     | GACT_TOGGLESELECT
  360.     , /* Activation */
  361.     GTYP_BOOLGADGET, /* Type */
  362.     &DemoTopBorder, &DemoITopBorder, /* Render */
  363.     (struct IntuiText *)"_Toggle", /* Text */
  364.     0L, NULL, /* MutualExcl, SpecialInfo */
  365.     6, /* GadgetID */
  366.     NULL /* UserData */
  367. },
  368. DemoGadget4 =
  369. {
  370.     &DemoGadget5, /* NextGadget */
  371.     BORDER+(GAD_WID+BORDER)*3, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  372.     GFLG_GADGHNONE
  373.     | GFLG_LABELITEXT
  374.     | GFLG_RELBOTTOM
  375.     , /* Flags */
  376.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  377.     GTYP_BOOLGADGET, /* Type */
  378.     &DemoTopBorder, NULL, /* Render */
  379.     &DemoIText, /* Text */
  380.     0L, NULL, /* MutualExcl, SpecialInfo */
  381.     5, /* GadgetID */
  382.     NULL /* UserData */
  383. },
  384. DemoGadget3 =
  385. {
  386.     &DemoGadget4, /* NextGadget */
  387.     BORDER+(GAD_WID+BORDER)*2, -((GAD_HEI+BORDER)*2),
  388.     IMAGEBUTTON0_WIDTH, IMAGEBUTTON0_HEIGHT, /* hit box */
  389.     GFLG_GADGHIMAGE
  390.     | GFLG_LABELSTRING
  391.     | GFLG_RELBOTTOM
  392.     | GFLG_GADGIMAGE
  393.     , /* Flags */
  394.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  395.     GTYP_BOOLGADGET, /* Type */
  396.     &ImageButton0Image, &ImageButton1Image, /* Render */
  397.     (struct IntuiText *)"_Image", /* Text */
  398.     0L, NULL, /* MutualExcl, SpecialInfo */
  399.     4, /* GadgetID */
  400.     NULL /* UserData */
  401. },
  402. DemoGadget2 =
  403. {
  404.     &DemoGadget3, /* NextGadget */
  405.     BORDER+(GAD_WID+BORDER)*1, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  406.     GFLG_GADGHBOX
  407.     | GFLG_LABELSTRING
  408.     | GFLG_RELBOTTOM
  409.     , /* Flags */
  410.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  411.     GTYP_BOOLGADGET, /* Type */
  412.     &DemoTopBorder, NULL, /* Render */
  413.     (struct IntuiText *)"_Box", /* Text */
  414.     0L, NULL, /* MutualExcl, SpecialInfo */
  415.     3, /* GadgetID */
  416.     NULL /* UserData */
  417. },
  418. DemoGadget1 =
  419. {
  420.     &DemoGadget2, /* NextGadget */
  421.     BORDER+(GAD_WID+BORDER)*0, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  422.     GFLG_GADGHCOMP
  423.     | GFLG_LABELSTRING
  424.     | GFLG_RELBOTTOM
  425.     , /* Flags */
  426.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  427.     GTYP_BOOLGADGET, /* Type */
  428.     &DemoTopBorder, NULL, /* Render */
  429.     (struct IntuiText *)"_Complement", /* Text */
  430.     0L, NULL, /* MutualExcl, SpecialInfo */
  431.     2, /* GadgetID */
  432.     NULL /* UserData */
  433. },
  434. ExitGadget =
  435. {
  436.     &DemoGadget1, /* NextGadget */
  437.     BORDER, -(GAD_HEI+BORDER), GAD_WID, GAD_HEI, /* hit box */
  438.     GFLG_GADGHIMAGE
  439.     | GFLG_LABELSTRING
  440.     | GFLG_RELBOTTOM
  441.     , /* Flags */
  442.     GACT_RELVERIFY, /* Activation */
  443.     GTYP_BOOLGADGET, /* Type */
  444.     &DemoTopBorder, &DemoITopBorder, /* Render */
  445.     (struct IntuiText *)"E_xit", /* Text */
  446.     0L, NULL, /* MutualExcl, SpecialInfo */
  447.     1, /* GadgetID */
  448.     NULL /* UserData */
  449. };
  450.  
  451. int main (int argc, char ** argv)
  452. {
  453.     struct Window * win;
  454.     struct RastPort * rp;
  455.     struct IntuiMessage * im;
  456.     struct IOStdReq cioreq;
  457.     struct InputEvent ievent =
  458.     {
  459.     NULL,
  460.     IECLASS_RAWKEY,
  461.     /* ... */
  462.     };
  463.     int cont, draw;
  464.     int prop;
  465.  
  466.     bug("Welcome to the window demo of AROS\n");
  467.  
  468.     GfxBase=(struct GfxBase *)OpenLibrary(GRAPHICSNAME,39);
  469.     IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",39);
  470.  
  471.     if (!GfxBase)
  472.     {
  473.     bug ("Couldn't open %s\n", GRAPHICSNAME);
  474.     goto end;
  475.     }
  476.  
  477.     if (!IntuitionBase)
  478.     {
  479.     bug ("Couldn't open intuition.library\n");
  480.     goto end;
  481.     }
  482.  
  483.     D(bug("main=%p Refresh=%p\n"
  484.     , main
  485.     , Refresh
  486.     ));
  487.  
  488.     OpenDevice ("console.device", -1, (struct IORequest *)&cioreq, 0);
  489.     ConsoleDevice = (struct Library *)cioreq.io_Device;
  490.     bug ("Opening console.device=%p\n", ConsoleDevice);
  491.  
  492.     if (!ConsoleDevice)
  493.     {
  494.     D(bug("Couldn't open console\n"));
  495.     return 10;
  496.     }
  497.  
  498.     frame = NewObject (NULL, FRAMEICLASS
  499.     , IA_Width,  GAD_WID
  500.     , IA_Height, GAD_HEI
  501.     , TAG_END
  502.     );
  503.  
  504.     gadget = NewObject (NULL, BUTTONGCLASS
  505.     , GA_Left,    BORDER*2+GAD_WID
  506.     , GA_RelBottom, -(GAD_HEI+BORDER)
  507.     , GA_Width,    GAD_WID
  508.     , GA_Height,    GAD_HEI
  509.     , GA_Previous,    &DemoGadget12
  510.     , GA_Text,    "_Exit"
  511.     , GA_RelVerify, TRUE
  512.     , GA_ID,    1
  513.     , GA_Image,    frame
  514.     , TAG_END
  515.     );
  516.  
  517.     win = OpenWindowTags (NULL
  518.     , WA_Title,        "Open a window demo"
  519.     , WA_Left,        100
  520.     , WA_Top,        100
  521.     , WA_Width,        640
  522.     , WA_Height,        512
  523.     , WA_IDCMP,        IDCMP_RAWKEY
  524.                 | IDCMP_REFRESHWINDOW
  525.                 | IDCMP_MOUSEBUTTONS
  526.                 | IDCMP_MOUSEMOVE
  527.                 | IDCMP_GADGETDOWN
  528.                 | IDCMP_GADGETUP
  529.     , WA_SimpleRefresh, TRUE
  530.     , WA_Gadgets,        &ExitGadget
  531.     , TAG_END
  532.     );
  533.     D(bug("OpenWindow win=%p\n", win));
  534.  
  535.     if (!win)
  536.     {
  537.     D(bug("Couldn't open window\n"));
  538.     return 10;
  539.     }
  540.  
  541.     rp = win->RPort;
  542.  
  543.     DemoIText.LeftEdge = GAD_WID/2 - rp->Font->tf_XSize*2;
  544.     DemoIText.TopEdge = GAD_HEI/2 - rp->Font->tf_YSize/2 + rp->Font->tf_Baseline;
  545.  
  546.     if (!gadget)
  547.     bug("Warning: Couldn't create gadget\n");
  548.  
  549.     if (!frame)
  550.     bug("Warning: Couldn't create frame\n");
  551.  
  552.     cont = 1;
  553.     draw = 0;
  554.     prop = 0;
  555.  
  556.     while (cont)
  557.     {
  558.     if ((im = (struct IntuiMessage *)GetMsg (win->UserPort)))
  559.     {
  560.         /* D("Got msg\n"); */
  561.         switch (im->Class)
  562.         {
  563.         case IDCMP_RAWKEY: {
  564.         UBYTE buf[10];
  565.         int   len;
  566.         int   t;
  567.  
  568.         ievent.ie_Code        = im->Code;
  569.         ievent.ie_Qualifier = im->Qualifier;
  570.  
  571.         len = RawKeyConvert (&ievent, buf, sizeof (buf), NULL);
  572.  
  573.         bug ("Key %s %3ld + Qual %08lx=\""
  574.             , (im->Code & 0x8000) ? "up  " : "down"
  575.             , (LONG)(im->Code & 0xFF)
  576.             , (LONG)im->Qualifier
  577.         );
  578.  
  579.         if (len < 0)
  580.         {
  581.             bug ("\" (buffer too short)");
  582.             break;
  583.         }
  584.  
  585.         for (t=0; t<len; t++)
  586.         {
  587.             if (buf[t] < 32 || (buf[t] >= 127 && buf[t] < 160))
  588.             {
  589.             switch (buf[t])
  590.             {
  591.             case '\n':
  592.                 bug ("\\n");
  593.                 break;
  594.  
  595.             case '\t':
  596.                 bug ("\\t");
  597.                 break;
  598.  
  599.             case '\b':
  600.                 bug ("\\b");
  601.                 break;
  602.  
  603.             case '\r':
  604.                 bug ("\\r");
  605.                 break;
  606.  
  607.             case 0x1B:
  608.                 bug ("^[");
  609.                 break;
  610.  
  611.             default:
  612.                 bug ("\\x%02x", buf[t]);
  613.                 break;
  614.             } /* switch */
  615.             }
  616.             else
  617.             bug ("%c", buf[t]);
  618.         }
  619.         bug ("\"\n");
  620.  
  621.         if (*buf == '\x1b' && len == 1)
  622.         {
  623.             if (len == 1)
  624.             cont = 0;
  625.         }
  626.  
  627.         break; }
  628.  
  629.         case IDCMP_MOUSEBUTTONS:
  630.         switch (im->Code)
  631.         {
  632.         case SELECTDOWN:
  633.             SetAPen (rp, 2);
  634.             Move (rp, im->MouseX, im->MouseY);
  635.             draw = 1;
  636.             break;
  637.  
  638.         case SELECTUP:
  639.             draw = 0;
  640.             break;
  641.  
  642.         case MIDDLEDOWN:
  643.             SetAPen (rp, 1);
  644.             Move (rp, im->MouseX, im->MouseY);
  645.             draw = 1;
  646.             break;
  647.  
  648.         case MIDDLEUP:
  649.             draw = 0;
  650.             break;
  651.  
  652.         case MENUDOWN:
  653.             SetAPen (rp, 3);
  654.             Move (rp, im->MouseX, im->MouseY);
  655.             draw = 1;
  656.             break;
  657.  
  658.         case MENUUP:
  659.             draw = 0;
  660.             break;
  661.  
  662.         }
  663.  
  664.         break;
  665.  
  666.         case IDCMP_MOUSEMOVE:
  667.         if (draw)
  668.             Draw (rp, im->MouseX, im->MouseY);
  669.  
  670.         break;
  671.  
  672.         case IDCMP_REFRESHWINDOW:
  673.         Refresh (rp);
  674.         break;
  675.  
  676.         case IDCMP_GADGETDOWN: {
  677.         struct Gadget * gadget;
  678.         LONG pot;
  679.  
  680.         gadget = (struct Gadget *)im->IAddress;
  681.  
  682.         bug ("User pressed gadget %ld\n", gadget->GadgetID);
  683.  
  684.         switch (gadget->GadgetID)
  685.         {
  686.         case 10: /* Up */
  687.             pot = DemoPropInfo3.VertPot - DemoPropInfo3.VertBody;
  688.  
  689.             if (pot < 0)
  690.             pot = 0;
  691.  
  692.             NewModifyProp (&DemoGadget7
  693.             , win
  694.             , NULL
  695.             , DemoPropInfo2.Flags
  696.             , DemoPropInfo2.HorizPot
  697.             , pot
  698.             , DemoPropInfo2.HorizBody
  699.             , DemoPropInfo2.VertBody
  700.             , 1
  701.             );
  702.             NewModifyProp (&DemoGadget8
  703.             , win
  704.             , NULL
  705.             , DemoPropInfo3.Flags
  706.             , DemoPropInfo3.HorizPot
  707.             , pot
  708.             , DemoPropInfo3.HorizBody
  709.             , DemoPropInfo3.VertBody
  710.             , 1
  711.             );
  712.  
  713.             break;
  714.  
  715.         case 11: /* Down */
  716.             pot = DemoPropInfo3.VertPot + DemoPropInfo3.VertBody;
  717.  
  718.             if (pot > MAXPOT)
  719.             pot = MAXPOT;
  720.  
  721.             NewModifyProp (&DemoGadget7
  722.             , win
  723.             , NULL
  724.             , DemoPropInfo2.Flags
  725.             , DemoPropInfo2.HorizPot
  726.             , pot
  727.             , DemoPropInfo2.HorizBody
  728.             , DemoPropInfo2.VertBody
  729.             , 1
  730.             );
  731.             NewModifyProp (&DemoGadget8
  732.             , win
  733.             , NULL
  734.             , DemoPropInfo3.Flags
  735.             , DemoPropInfo3.HorizPot
  736.             , pot
  737.             , DemoPropInfo3.HorizBody
  738.             , DemoPropInfo3.VertBody
  739.             , 1
  740.             );
  741.  
  742.             break;
  743.  
  744.         case 12: /* Right */
  745.             pot = DemoPropInfo1.HorizPot + DemoPropInfo1.HorizBody;
  746.  
  747.             if (pot > MAXPOT)
  748.             pot = MAXPOT;
  749.  
  750.             NewModifyProp (&DemoGadget6
  751.             , win
  752.             , NULL
  753.             , DemoPropInfo1.Flags
  754.             , pot
  755.             , DemoPropInfo1.VertPot
  756.             , DemoPropInfo1.HorizBody
  757.             , DemoPropInfo1.VertBody
  758.             , 1
  759.             );
  760.             NewModifyProp (&DemoGadget8
  761.             , win
  762.             , NULL
  763.             , DemoPropInfo3.Flags
  764.             , pot
  765.             , DemoPropInfo3.VertPot
  766.             , DemoPropInfo3.HorizBody
  767.             , DemoPropInfo3.VertBody
  768.             , 1
  769.             );
  770.  
  771.             break;
  772.  
  773.         case 13: /* Left */
  774.             pot = DemoPropInfo1.HorizPot - DemoPropInfo1.HorizBody;
  775.  
  776.             if (pot < 0)
  777.             pot = 0;
  778.  
  779.             NewModifyProp (&DemoGadget6
  780.             , win
  781.             , NULL
  782.             , DemoPropInfo1.Flags
  783.             , pot
  784.             , DemoPropInfo1.VertPot
  785.             , DemoPropInfo1.HorizBody
  786.             , DemoPropInfo1.VertBody
  787.             , 1
  788.             );
  789.             NewModifyProp (&DemoGadget8
  790.             , win
  791.             , NULL
  792.             , DemoPropInfo3.Flags
  793.             , pot
  794.             , DemoPropInfo3.VertPot
  795.             , DemoPropInfo3.HorizBody
  796.             , DemoPropInfo3.VertBody
  797.             , 1
  798.             );
  799.  
  800.             break;
  801.  
  802.         }
  803.  
  804.         break; }
  805.  
  806.         case IDCMP_GADGETUP: {
  807.         struct Gadget * gadget;
  808.  
  809.         gadget = (struct Gadget *)im->IAddress;
  810.  
  811.         bug ("User released gadget %ld\n", gadget->GadgetID);
  812.  
  813.         if (gadget->GadgetID == 1)
  814.             cont = 0;
  815.         else if (gadget->GadgetID == 2)
  816.         {
  817.             prop ++;
  818.  
  819.             switch (prop)
  820.             {
  821.             case 0:
  822.             NewModifyProp (&DemoGadget6, win, NULL,
  823.                 DemoPropInfo1.Flags,
  824.                 0, 0, MAXBODY, MAXBODY, 1);
  825.             NewModifyProp (&DemoGadget7, win, NULL,
  826.                 DemoPropInfo2.Flags,
  827.                 0, 0, MAXBODY, MAXBODY, 1);
  828.             NewModifyProp (&DemoGadget8, win, NULL,
  829.                 DemoPropInfo3.Flags,
  830.                 0, 0, MAXBODY, MAXBODY, 1);
  831.             break;
  832.  
  833.             case 1:
  834.             NewModifyProp (&DemoGadget6, win, NULL,
  835.                 DemoPropInfo1.Flags,
  836.                 0, 0, MAXBODY/2, MAXBODY, 1);
  837.             NewModifyProp (&DemoGadget7, win, NULL,
  838.                 DemoPropInfo2.Flags,
  839.                 0, 0, MAXBODY, MAXBODY/2, 1);
  840.             NewModifyProp (&DemoGadget8, win, NULL,
  841.                 DemoPropInfo3.Flags,
  842.                 0, 0, MAXBODY/2, MAXBODY/2, 1);
  843.             break;
  844.  
  845.             case 2:
  846.             NewModifyProp (&DemoGadget6, win, NULL,
  847.                 DemoPropInfo1.Flags,
  848.                 MAXPOT, 0, MAXBODY/2, MAXBODY, 1);
  849.             NewModifyProp (&DemoGadget7, win, NULL,
  850.                 DemoPropInfo2.Flags,
  851.                 0, MAXPOT, MAXBODY, MAXBODY/2, 1);
  852.             NewModifyProp (&DemoGadget8, win, NULL,
  853.                 DemoPropInfo3.Flags,
  854.                 MAXPOT, MAXPOT, MAXBODY/2, MAXBODY/2, 1);
  855.             break;
  856.  
  857.             default:
  858.             NewModifyProp (&DemoGadget6, win, NULL,
  859.                 DemoPropInfo1.Flags,
  860.                 0, 0, MAXBODY/9, MAXBODY, 1);
  861.             NewModifyProp (&DemoGadget7, win, NULL,
  862.                 DemoPropInfo2.Flags,
  863.                 0, 0, MAXBODY, MAXBODY/9, 1);
  864.             NewModifyProp (&DemoGadget8, win, NULL,
  865.                 DemoPropInfo3.Flags,
  866.                 0, 0, MAXBODY/9, MAXBODY/9, 1);
  867.             prop = -1;
  868.             break;
  869.  
  870.             }
  871.         }
  872.  
  873.         break; }
  874.  
  875.         } /* switch */
  876.  
  877.         Flush (Output ());
  878.  
  879.         ReplyMsg ((struct Message *)im);
  880.     }
  881.     else
  882.     {
  883.         /* D("Waiting\n"); */
  884.         Wait (1L << win->UserPort->mp_SigBit);
  885.     }
  886.     }
  887.  
  888.     D(bug("CloseWindow (%p)\n", win));
  889.     CloseWindow (win);
  890.  
  891. end:
  892.     if (gadget)
  893.     DisposeObject (gadget);
  894.  
  895.     if (frame)
  896.     DisposeObject (frame);
  897.  
  898.     if (GfxBase)
  899.     CloseLibrary ((struct Library *)GfxBase);
  900.  
  901.     if (IntuitionBase)
  902.     CloseLibrary ((struct Library *)IntuitionBase);
  903.  
  904.     return 0;
  905. }
  906.